package map10;

import map09.Person;
import map09.Student;

import java.util.ArrayList;
import java.util.Collections;

/*
Collection接口：是单列集合的顶级父接口
Collections类 ：专门操作集合的工具类，这个类中大量方法都跟我们的集合相关
  static <T> boolean  addAll(Collection<? super T> c, T... elements)
          将所有指定元素添加到指定 collection 中。

  static void reverse(List<?> list)
          反转指定列表中元素的顺序。

  static void shuffle(List<?> list)
          可以随机集合中元素
 */
public class Demo01 {
    public static void main(String[] args) {
        //method01();
        //method02();
        //method03();
        ArrayList<String> al = new ArrayList<>();
        Collections.addAll(al, "张三", "李四", "王五", "赵六");
        System.out.println(al);//[张三, 李四, 王五, 赵六]

        Collections.shuffle(al);
        System.out.println(al);//[张三, 赵六, 王五, 李四]
                               //[李四, 赵六, 王五, 张三]
    }

    private static void method03() {
        ArrayList<String> al = new ArrayList<>();
        Collections.addAll(al, "张三", "李四", "王五", "赵六");
        System.out.println(al);//[张三, 李四, 王五, 赵六]

        Collections.reverse(al);
        System.out.println(al);//[赵六, 王五, 李四, 张三]
    }

    private static void method02() {
        ArrayList<Person> people = new ArrayList<Person>();
        ArrayList<Student> students= new ArrayList<Student>();
        Collections.addAll(students, new Student("流川枫"));//当给第二个参数传入一个new Student()时候，此时T的类型被确定为Student类型
        //第一参数 ? super T 被确定 ？ super Student
        //限定集合中泛型为Student类型或者为Student父类型
        Collections.addAll(people, new Student("流川枫"));//集合中每个元素类型为Person类型指向 Student对象  多态

        //Collections.addAll(students,new Person("老王"));//当给第二个参数传入一个new Person()时候，此时T的类型被确定为Person类型
        //第一参数 ? super T 被确定 ？ super Person
        //限定集合中泛型为Person类型或者为Person父类型
    }

    private static void method01() {
        ArrayList<String> al = new ArrayList<String>();
        Collections.addAll(al, "abc", "def,", "ghk");
        System.out.println(al);
    }
}
